<?php

namespace app\model;

use support\Model;
/**
 * 卡片用户关联模型
 * 
 * 该模型用于管理用户与卡片的关联关系，包括：
 * - 用户绑定的卡片信息
 * - 卡片的使用状态和过期时间
 * - 福豆数量管理
 * 
 * 数据库表结构：
 * - user_id: 用户ID
 * - card_id: 卡ID
 * - card_item_id: 卡项ID
 * - expired_at: 过期时间戳(绑定时的具体过期时间)
 * - created_at: 创建时间
 * - updated_at: 更新时间
 * - phone: 手机号
 * - status: 状态 (0=无效, 1=有效)
 * - score: 福豆数
 */
class CardUserModel extends Model
{
    /**
     * 关联表名
     * @var string
     */
    protected $table = 'card_user';

    /**
     * 主键
     * @var string
     */
    protected $primaryKey = 'id';

    /**
     * 关闭自动时间戳
     * @var bool
     */
    public $timestamps = false;

    /**
     * 可批量赋值字段
     * @var array
     */
    protected $fillable = [
        'user_id',
        'card_id',
        'card_item_id',
        'expired_at',
        'status',
        'score',
        'created_at',
        'updated_at',
        'phone',
        'type',
        'topic_order_id',
        'source_user_id'
    ];

    /**
     * 隐藏字段
     * @var array
     */
    protected $hidden = [
    ];

    protected $guarded = [];

    /**
     * 状态常量
     */
    const STATUS_UNUSED = 0;  // 未使用
    const STATUS_USED = 1;    // 已使用

    /**
     * 获取状态文本
     * @param int $status
     * @return string
     */
    public static function getStatusText($status)
    {
        $statusMap = [
            self::STATUS_UNUSED => '未使用',
            self::STATUS_USED => '已使用'
        ];
        return $statusMap[$status] ?? '未知状态';
    }

    /**
     * 关联用户模型
     * @return \support\Model
     */
    public function user()
    {
        return $this->belongsTo(UserModel::class, 'user_id', 'id');
    }
} 